package com.neu.question.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.neu.question.common.utils.DateUtil;
import com.neu.question.common.utils.UUIDUtil;
import com.neu.question.domain.ProjectInfo;
import com.neu.question.domain.QuestionnaireInfo;
import com.neu.question.mapper.QuestionnaireInfoMapper;
import com.neu.question.mapper.UserInfoMapper;
import com.neu.question.service.ProjectInfoService;
import com.neu.question.mapper.ProjectInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author DELL
* @description 针对表【project_info】的数据库操作Service实现
* @createDate 2022-10-31 19:09:10
*/
@Service
public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo>
    implements ProjectInfoService{

    @Autowired
    private QuestionnaireInfoMapper questionnaireEntityMapper;

    @Autowired
    private ProjectInfoMapper projectEntityMapper;

    @Autowired
    private UserInfoMapper userEntityMapper;

    @Override
    public List<Map<String, Object>> queryProjectList(ProjectInfo projectEntity) {
        List<Map<String, Object>> resultList = projectEntityMapper.queryProjectList(projectEntity);
        return resultList;
    }

    @Override
    /**
     * 删除项目
     *
     * @param projectEntity
     * @return
     */
    public int deleteProjectById(ProjectInfo projectEntity) {
        QuestionnaireInfo questionnaireEntity = new QuestionnaireInfo();
        questionnaireEntity.setProjectId(projectEntity.getId());
        int status = questionnaireEntityMapper.queryReleaseQuestionnaireCount(questionnaireEntity);
        //有正在进行中的问卷
        //这里需要补全权限信息的判定（比如：如果权限status是1就不能删除，返回其他数字，
        // 然后在controller中进行异常信息的抛出）
        if (status > 0) {
            return 0;
        }
        //找到该项目下的所有问卷
        Map<String, Object> map = new HashMap<>();
        map.put("projectId", projectEntity.getId());
        List<Map<String, Object>> questionnaireEntityList =
                questionnaireEntityMapper.queryQuestionListAndHistoryByProjectId(map);
        for (Map<String, Object> questionnaireEntityMap : questionnaireEntityList) {
            //问卷停止中，改变状态为未发布
            if (questionnaireEntityMap.get("questionStop").toString().equals("3")) {
                //修改问卷状态为开启但未发布
                questionnaireEntityMap.put("questionStop", 5);
                System.out.println(questionnaireEntityMap.get("questionStop"));
                int result =
                        questionnaireEntityMapper.modifyQuestionnaireStatus((HashMap<String, Object>) questionnaireEntityMap);
            }
            //清除项目id
            questionnaireEntityMap.put("projectId", null);
            int result =
                    questionnaireEntityMapper.modifyProjectInQuestionnaire((HashMap<String, Object>) questionnaireEntityMap);
        }
        //删除项目
        projectEntityMapper.deleteById(projectEntity);
        return 1;
    }

    @Override
    public int addProjectInfo(ProjectInfo projectEntity, String user) {
        if (projectEntity.getProjectName() != null) {
            int userResult = projectEntityMapper.queryExistProject(projectEntity);
            if (userResult != 0) {
                //项目名已经存在
                return 0;
            }
        }
        String id = UUIDUtil.getOneUUID();
        projectEntity.setId(id);
        //查找userID，输入到project中
        String userID = userEntityMapper.selectIdByName(user);
        projectEntity.setUserId(userID);
        //创建人
        projectEntity.setCreatedBy(user);
        //创建时间
        Date date = DateUtil.getCreateTime();
        projectEntity.setCreationDate(date);
        //最后修改时间
        projectEntity.setLastUpdateDate(date);
        //最后修改人
        projectEntity.setLastUpdatedBy(user);
        int result = projectEntityMapper.insert(projectEntity);
        return 1;
    }

    @Override
    /**
     * 修改项目
     *
     * @param projectEntity
     * @return
     */
    public int modifyProjectInfo(ProjectInfo projectEntity, String user) {
        QuestionnaireInfo questionnaireEntity = new QuestionnaireInfo();
        questionnaireEntity.setProjectId(projectEntity.getId());
        int status = questionnaireEntityMapper.queryReleaseQuestionnaireCount(questionnaireEntity);
        //存在发布中问卷
        if (status > 0) {
            return 0;
        } else if (projectEntity.getProjectName() != null) {
            int projectResult = projectEntityMapper.queryExistProject(projectEntity);
            if (projectResult != 0) {
                //项目名已经存在
                return 2;
            }
        }
        //跟新时间
        Date date = DateUtil.getCreateTime();
        projectEntity.setLastUpdateDate(date);
        //最后修改人
        projectEntity.setLastUpdatedBy(user);
        int result = projectEntityMapper.updateByPrimaryKey(projectEntity);
        return 1;
    }
}




